package com.tedu.api.io;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

/**
 * listFiles（接口：Filter）
 * 作用：按照“指定规则”获取对应文件/文件夹
 *
 * Filter接口---专门给ListFiles方法提供，过滤文件夹或者文件【指定规则】
 * accept（）从每个File的文件中判断，拿到【具体逻辑】的文件夹
 *
 * 需求：获取 API 项目下 所有子项【文件和文件夹】，获取src文件
 *     指定规则：验证是s开头就src
 *
 * 作业 2：FileFilter接口按照 匿名内部类 方式实现，功能加上需求！
 * 接口：FileFilter ff=new FileFilter（）{accept（）}
 *
 */
public class FilterAPI {
    public static void main(String[] args) throws IOException {
        //创建File文件类：获取当前API 文件夹 路径：./
        File file = new File("." + File.separator+"API");
        System.out.println(file.getCanonicalFile());
        //4.创建Filter接口对象---无法直接创建:实现类--实现--接口【创建】
        MyFilter my=new MyFilter();
        //2.获取文件夹下的所有“子项：文件夹下包括所有文件和文件夹”
        File[] subs = file.listFiles(my);
        //3.打印子项下的所有名字
        for (int i = 0; i < subs.length; i++) {//i 下标  从0开始
            System.out.println("所有文件和文件夹名：" + subs[i].getName());

        }
    }
    //单元测试：./路径指定父级
    /*@Test
    public void test01() throws IOException{
        //1.创建File文件类：截取当前API 文件夹 路径：./
        File file=new File("."+File.separator);
        System.out.println(file.getCanonicalFile());
        //4.创建Filter接口对象---无法直接创建:实现类--实现--接口【创建】

        }*/
    }
//
class MyFilter implements FileFilter{
    //accept(File pathname)
    //传入参数：File pathname--获取所有需要过滤文
    //作用：条件过滤条件，将获取所有需要文件过滤
    //     逐一过滤，【条件：规则--开发者指定】条件
    //满足返回ture，输出，条件不满足反之
    public boolean accept(File pathname) {
        //添加规则：文件或者文件是S开头--过滤
        //1、获取所有的文件夹名字
        String name= pathname.getName();
        //2、过滤以S开头的文件夹
        //字符串：starWith() 返回值boolean
        //作用：验证字符串首字符是不是匹配字符，如果匹配：ture，反之不匹配
        //3、打印过滤字符串
        System.out.println("过滤出来文件夹名字是："+name);
        return name.startsWith("s");
    }
}
